package cn.dylan.controller;

import cn.dylan.domain.User;
import com.netflix.hystrix.contrib.javanica.annotation.DefaultProperties;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RequestMapping("/order")
/*@DefaultProperties(defaultFallback = "defaultFallback") //整体配置熔断*/
//整体降级方法 就是用object去接收结果。
public class OrderController {

    @Autowired // 根据名称匹配
    private RestTemplate restTemplate;

    @GetMapping("/{id}")
    @HystrixCommand(fallbackMethod = "fallbackMethod")
    public User handlerGet(@PathVariable("id") Long id){
        // 调用user 服务器接口  用ip+端口号 + 路径访问
            // 方式一：同项目五编写一个工具类
            // 方式二：用springBoot自带的restTemplate 工具
                // 没有被spring框架管理 不能直接注入，需要去配置
        //getForObject
        // 集成了ribbon之后 访问url需要使用  被调用服务的应用名称
        /*String url="http://localhost:10020/user/" + id;*/
        long l = System.currentTimeMillis();
        String url="http://user-server/user/" + id;
        User user = restTemplate.getForObject(url, User.class);
        System.out.println(System.currentTimeMillis()-l);
        return user;
    }

    public User fallbackMethod(@PathVariable("id") Long id){
        return new User(-1L,"熔断了","ribbon-hystrix");
    }
}
